// Buffer 是 node中的16进制, 内存的标识全部用 二进制表示
// 二进制中 一个字节需要8个位, 用 16进制来表示, 整个的大小会小一些 ff

// Buffer 是 node中提供的. 老的用法, 可以通过 new Buffer 来使用

// Buffer 代表的是内存, 如果一旦声明好, 不能扩展的.(不能随意更改大小)
// 如果想去更改 buffer大小, 改小可以截取内存, 改大的话, 需要创建一个大的内存空间,将数据拷贝过去.

// 声明 buffer的时候, 需要指定大小 @types/node
// 数字
let buf1 = Buffer.alloc(3); // 最小单位是字节,
console.log(buf1);

// 很少使用数组来定义 buffer, 因为需要制定存放的内容,放不识别的东西就会认为是 0
// 数组
let buf2 = Buffer.from([0xff, 0xff, 0xff]) // 里面只能放数字,表示的是字节
console.log(buf2);

// 主要应用:  buffer可以存储数据, 数据可以全部用buffer表示出来. 可以和字符串相互转化
//字符串
let buf3 = Buffer.from('杨阳')
// console.log(buf3.toString())
// console.log(buf3.toString("base64"))
// console.log(buf3);

const fs = require("fs")
const path = require("path")

let r = fs.readFileSync(path.resolve(__dirname, './note.md'), "utf8")
console.log(r);

// 当我们读取操作时, 不指定编码,全部都是buffer类型, 如果取出来的buffer中的某一项都是10进制
// buffer中,实际上都是内存地址. 截取内存, 拿到也是内存地址.
const buf5 = Buffer.from([1, 2, 3, 4])
let buf6 = buf5.slice(0, 1)
console.log(buf6[0])
console.log(buf5);

// alloc from toString(), concat()方法,  length(长度指的是字节长度, 不是字符串长度)
console.log('--->', Buffer.from("杨阳").length) // 6

Buffer.prototype.copy = function (target, targetStart, sourceStat, sourceEnd) {

}
